/*
 * @Description: 字符串校验工具类
 * @Author: tao.xie
 * @Date: 2019-03-22 09:47:01
 * @Last Modified by: tao.xie
 * @Last Modified time: 2019-03-25 17:45:40
 */

/* 银行卡号正则，16-19位非0开头 */
const BankCardPattern = /^([1-9]{1})(\d{15}|\d{16}|\d{17}|\d{18})$/
/* 手机号正则，1开头11位数字 */
const PhoneNoPattern = /^1\d{10}$/
/* 月份和年份的正则 */
const MONTH_AND_YEAR_PATTERN = /^\d{2}$/
/* CVN2码 */
const CVN2_PATTERH = /^\d{3}$/
/* 验证码码 */
const VERCATION_PATTERH = /^\d{6}$/

/**
 *
 * 验证银行卡号是否合法
 *
 * @param {String} cardno 待验证的卡号
 */
function isBankCardValid(cardno) {
  return BankCardPattern.test(cardno)
}
/**
 *
 * 验证手机号码是否合法
 *
 * @param {String} phoneno 待验证的手机号
 */
function isPhoneNoValid(phoneno) {
  return PhoneNoPattern.test(phoneno)
}

/**
 *验证手机验证码是否合法
 *
 * @param {String} code  待验证的验证码
 */
function isVerificationCodeValid(code) {
  return VERCATION_PATTERH.test(code)
}

/**
 *验证手机号
 *
 * @param {String} phoneNo
 * @returns
 */
function validPhoneNo(phoneNo) {
  return new Promise((resolve, reject) => {
    if (!phoneNo) {
      reject(new Error('请输入预留手机号'))
    } else if (!isPhoneNoValid(phoneNo)) {
      reject(new Error('请输入正确的预留手机号'))
    } else {
      resolve(phoneNo)
    }
  })
}

/**
 *验证银行卡号
 *
 * @param {String} cardno
 * @returns
 */
function validBankCardNo(cardno) {
  return new Promise((resolve, reject) => {
    if (!cardno) {
      reject(new Error('请输入银行卡号'))
    } else if (!isBankCardValid(cardno)) {
      reject(new Error('请输入正确的银行卡号'))
    } else {
      resolve(cardno)
    }
  })
}

/**
 *校验手机验证码
 *
 * @param {String} code
 */
function validVercationCode(code) {
  return new Promise((resolve, reject) => {
    if (!code) {
      reject(new Error('请输入手机验证码'))
    } else if (!isVerificationCodeValid(code)) {
      reject(new Error('请输入正确的手机验证码'))
    } else {
      resolve(code)
    }
  })
}

/**
 *校验cvn2码
 *
 * @param {String} code
 * @returns
 */
function validCVN2Code(code) {
  return new Promise((resolve, reject) => {
    if (!code) {
      reject(new Error('请输入CVN2码'))
    } else if (!CVN2_PATTERH.test(code)) {
      reject(new Error('请输入正确的CVN2码'))
    } else {
      resolve(code)
    }
  })
}

/**
 * 校验月份
 *
 * @param {String} month
 * @returns
 */
function validMonth(month) {
  return new Promise((resolve, reject) => {
    if (!month) {
      reject(new Error('请输入有效期月份'))
    } else if (!MONTH_AND_YEAR_PATTERN.test(month)) {
      reject(new Error('请输入正确的有效期月份'))
    } else {
      resolve(month)
    }
  })
}

/**
 * 校验年份
 *
 * @param {String} year
 * @returns
 */
function validYear(year) {
  return new Promise((resolve, reject) => {
    if (!year) {
      reject(new Error('请输入有效期年份'))
    } else if (!MONTH_AND_YEAR_PATTERN.test(year)) {
      reject(new Error('请输入正确的有效期年份'))
    } else {
      resolve(year)
    }
  })
}

export {
  validPhoneNo,
  validBankCardNo,
  validVercationCode,
  validCVN2Code,
  validMonth,
  validYear
}
